Repository navigation
DEV: add program case analytics - #730
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Изменения
Добавлена read-only аналитика проектов по системному кейсу в существующий
GET /programs/:programId/manager-overview/. Новый endpoint и drilldown не создаются; прежние поля ответа не изменены.77c8d41e2139c5902f2c7958d499fe26b9c4ef79(origin/dev, проверен после fetch).d7cbb8846997212f623efab20680ebc8d701a1e6.feature/dev-program-case-analytics-api.Контракт и семантика
Новый top-level блок:
name="case"через существующийPROGRAM_CASE_FIELD_NAME/get_program_case_field(). Label, тип,show_filterи похожие имена не используются как эвристики.PartnerProgramProjectтекущей программы, не глобальныйProject. Состояния одного проекта в программах A/B изолированы.without_caseвключает отсутствующие, пустые и неактуальные значения. При отсутствии системного поляconfigured=false,items=[], все связи входят вwithout_case.submission_applicable = program.is_competitive. Счётчики статуса всегда используют только rawPartnerProgramProject.submitted, в том числе для noncompetitive; draft/public/timestamp их не переопределяют.profile.projectне учитываются. Пользователь дедуплицируется внутри каждого bucket, включаяwithout_case, но может входить в разные кейсы: сумма participants по кейсам не является global unique.solution_funnel.created/submitted/not_submitted; внутри bucketprojects_total = submitted + not_submitted.SQL и regression tests
Helper выполняет фиксированные 4 SQL-запроса: definition, grouped link counts, registered leader pairs, registered collaborator pairs. Число запросов одинаково для 1 и 20 options. Бюджет manager overview увеличен только на эти четыре запроса: с 10 до 14; budgets assignment list/scores не изменены.
Добавлено 13 tests: базовые метрики/reconciliation, zero/options order, точное имя, отсутствующие/legacy значения, no-case, noncompetitive, multi-program, реальное membership/dedup, query count и serializer. Текущая схема запрещает duplicate profile для пары user/program; regression подтверждает constraint. Существующее
value_textне nullable: отсутствие записи даёт NULL из subquery и покрыто тестом без изменения схемы.Проверки
workflow_dispatch: passed. PostgreSQL vendor иselect_for_update, проверки Django/models/migration drift, миграции на пустую PostgreSQL 15 DB — passed; targeted locking/response 39/39, полный backend suite 824/824, без skips.feed.tests.test_feed_api.FeedAPITests.test_feed_returns_project_news_as_news_contentожидает первымnews, но получаетproject; сбой воспроизводится и отдельным запуском этого теста с--keepdb. Затем при teardown full suite возникWinError 32удаления занятогоtest_db.sqlite3. Оба Linux CI прошли полный suite, включая этот feed-тест. Feed-код не менялся и не исправлялся вне scope.manage.py check,manage.py check --tag models,makemigrations --check --dry-run: passed, новых migrations нет.git diff --check,git diff --cached --check: passed.Локальные Windows Django tests использовали существующий внешний WeasyPrint stub для отсутствующей native-библиотеки; Linux PostgreSQL CI выполнен с реальными зависимостями репозитория, без этого stub.
Файлы и границы
partner_programs/services/case_analytics.pypartner_programs/services/analytics.pypartner_programs/serializers/analytics.pypartner_programs/tests/test_case_analytics_api.pypartner_programs/tests/test_manager_analytics_api.pypartner_programs/tests/test_assignment_analytics_api.pydocs/program-case-field.mddocs/program-manager-analytics-api.mdОбновлена документация контракта, participant semantics, reconciliation и SQL budget. Модели, migrations, case validation/option protection, canonical GET/PUT fields, submission, admin, filters, evaluation, team/invite rules не изменены. Angular, React, dependencies, workflows, Docker и deploy не затронуты.
Draft PR в
dev. Merge и deploy не выполнялись.